package com.dylearn.serve.impl;


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dylearn.domain.Book;
import com.dylearn.domain.SMSCode;
import com.dylearn.mapper.BookMapper;
import com.dylearn.serve.IMsgService;
import com.dylearn.utils.CommonTools;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Random;

//这个也是可以直接继承 -------ServiceImpl<Mapper, T>

/**
 * 缓存模拟 -功能撰写
 */
@Service
public class MsgServiceImpl extends ServiceImpl<BookMapper, Book> implements IMsgService {
    @Autowired
    BookMapper bookMapper;

    @Autowired
    CommonTools commonTools;


    //创建一个缓存 --这个可以用来校验数据
    HashMap<String, String> cacheMap = new HashMap<String, String>();

    /**
     * 通过手机号获取验证码
     */
    @Override
    public String getCode(String tele) {

        StringBuffer randomNum = new StringBuffer();

        //对手机号进行一个校验 -保证手机号大于 11 位且内容不包含字母
        if (commonTools.isNumber(tele)) {
            if (tele.length() == 11) {
                for (int i = 0; i < 6; i++) {
                    Integer code = new Random().nextInt(10); //生成一个 1 ~ 9 的 随机数 -验证码
                    randomNum.append(code + "");
                }

                //生成验证码后 我这边需要对数据进行存储
                cacheMap.put(tele, randomNum.toString());

                return randomNum.toString();
            }
        }

        return "获取失败！传入的手机号异常";
    }

    /**
     * 校验 手机号 和 验证码
     */
    @Override
    public boolean checkCode(SMSCode smsCode) {
        String cacheCode = cacheMap.get(smsCode.getTele());

        if (cacheCode.equals(smsCode.getCode())) {//校验验证码是否一致
            return true;
        }
        return false;
    }

    @CachePut(value = "cacheCode", key = "#tele")//这个注解主要是存值，仅存，不用
    @Override
    public String getCacheCode(String tele) {//生成验证码
        //对手机号进行一个校验 -保证手机号大于 11 位且内容不包含字母
        if (commonTools.isNumber(tele)) {
            if (tele.length() == 11) {
                return commonTools.generator(tele); //工具类调用方法并返回值
            }
        }

        return "获取失败！传入的手机号异常";

    }

    @Override
    public boolean checkCacheCode(SMSCode smsCode) {//这个从注解缓存中取值，需要到bean中加载才能获取
        //这边在 bean 中，加载缓存注解 并 获取值
        String cacheCode = commonTools.getMsgData(smsCode.getTele());

        return smsCode.getCode().equals(cacheCode);
    }
}
